package com.lnj.community.actuator;

import com.lnj.community.utiles.CommunityUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.stereotype.Component;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

/**
 * 这是一个自定义的 actuator 端点，用于检查数据库连接是否正常。
 * 当访问 /actuator/database 时，会返回一个 JSON 字符串，其中包含一个状态码和一个描述信息。
 * 如果数据库连接正常，则状态码为 0，描述信息为 "获取连接成功!"；
 * 如果数据库连接失败，则状态码为 1，描述信息为 "获取连接失败!"。
 * @author LNJ
 * @create 2022-04-25 17:36
 */
@Component
@Endpoint(id = "database")
public class DatabaseEndpoint {

    private static final Logger logger = LoggerFactory.getLogger(DatabaseEndpoint.class);

    @Autowired
    private DataSource dataSource;

    @ReadOperation
    public String checkConnection() {
        try (
                Connection conn = dataSource.getConnection();
        ) {
            return CommunityUtil.getJSONString(0, "获取连接成功!");
        } catch (SQLException e) {
            logger.error("获取连接失败:" + e.getMessage());
            return CommunityUtil.getJSONString(1, "获取连接失败!");
        }
    }

}
